<?php
require_once 'Listagem.php';
require_once 'Objeto.php';
class ListagemPorObjeto implements Listagem{

    public function listar(array &$dados, &$pagina, &$numRegistrosPorPagina){
        $consulta_from = "";
        $consulta_where = "where ";
        $dadosFiltros = array();
        if (isset($dados['nome'])) {
            $dadosFiltros[] = $dados['nome'];
            $consulta_where = $consulta_where.'o.nome = ? and ';
        }
        if (isset($dados['cod_fabricante'])) {
            $dadosFiltros[] = $dados['cod_fabricante'];
            $consulta_from = $consulta_from . ", obj_fab ofab ";
            $consulta_where = $consulta_where.'ofab.cod_fabricante = ? and '.
                'o.cod_interno = ofab.cod_interno and ';
        }
        if (isset($dados['assunto'])) {
            $dadosFiltros[] = $dados['nome_assunto'];
            $consulta_from = $consulta_from . ", obj_assunto oass, assunto ass ";
            $consulta_where = $consulta_where.'ass.nome_assunto = ? and '.
                'o.cod_interno = oass.cod_interno and oass.cod_assunto = ass.cod_assunto and ';
        }
        if (isset($dados['lz_codigo'])) {
            $dadosFiltros[] = $dados['lz_codigo'];
            $consulta_from = $consulta_from . ", detalhe_localizacao det_loc ";
            $consulta_where = $consulta_where.'det_loc.cod_interno = o.cod_interno and '.
                'det_loc.lz_codigo = ? and ';
        }
        if (isset($dados['anoinicial'])) {
            $dadosFiltros[] = $dados['anoinicial'];
            $consulta_from = $consulta_from . ", epoca epo ";
            $consulta_where = $consulta_where.'epo.cod_epoca = o.cod_epoca and '.
                'epo.ano >= ? and ';
        }
        if (isset($dados['anofinal'])) {
            $dadosFiltros[] = $dados['anofinal'];
            if (strpos($consulta_from, ", epoca epo ") == 0) {
                $consulta_from = $consulta_from . ", epoca epo ";
            }
            $consulta_where = $consulta_where.'epo.cod_epoca = o.cod_epoca and '.
                'epo.ano <= ? and ';
        }
        if ($consulta_where == "where ") {
            return 'Selecione ao menos uma opção para consulta';
        }
        $query = $consulta_from.$consulta_where;
        $query = substr_replace($query, "" , strlen($query) - 4)." limit ".$numRegistrosPorPagina." offset ".($numRegistrosPorPagina*$pagina);
        return Objeto::listar($query, $dadosFiltros);
    }
}
?>
